Olen jättänyt JSONin kanssa jonkin aikaa, vain työnnän sen tekstiksi ja se ei ole vahingoittanut ketään (tiedän), mutta haluaisin aloittaa asioiden tekemisen oikein. Olen nähnyt niin monia väitettyjä "standardeja" JSON-sisältötyypille: sovellus / Json application / x-javascript teksti / javascript teksti / x-javascript teksti / x-json Mutta kumpi on oikea tai paras? Katson, että niiden välillä on tietoturva- ja selaintukikysymyksiä. Tiedän, että on samanlainen kysymys, mikä MIME-tyyppi, jos REST-sovellusliittymä palauttaa JSON: n, mutta haluaisin hieman kohdennetun vastauksen.
2020-12-07 21:16:53
1 2 Seuraava JSON-teksti: sovellus / Json JSON-tekstin MIME-mediatyyppi on application / json. Oletuskoodaus on UTF-8. (Lähde: RFC 4627). JSONP (suoritettava JavaScript), jossa on takaisinsoitto: sovellus / javascript Tässä on joitain blogiviestejä, jotka mainittiin asiaankuuluvissa kommenteissa: Miksi sinun ei pitäisi käyttää tekstiä / html: ää JSON: lle Internet Explorerilla on joskus ongelmia sovelluksessa / json Melko täydellinen luettelo mimetyypeistä ja mihin niitä käytetään IANA: n virallinen miimityyppiluettelo @ gnrfanin alla olevasta vastauksesta | IANA on rekisteröinyt JSON: n virallisen MIME-tyypin sovellukseksi / json. Kysyttäessä miksi ei tekstiä / jsonia, Crockford näyttää sanoneen, että JSON ei ole oikeastaan JavaScripti eikä teksti, ja myös IANA jakoi todennäköisemmin sovelluksen / * kuin teksti / *. Lisää resursseja: Mediatyypit Kommenttipyyntö 4627 bluesmoon: JSONilla on tyyppi | JSON: Sisältötyyppi: application / json JSON-P: Content-Type: sovellus / javascript | Tietysti oikea MIME-mediatyyppi JSON: lle on application / json, mutta on välttämätöntä ymmärtää, minkä tyyppisiä tietoja sovelluksessasi odotetaan. Käytän esimerkiksi Ext GWT: tä ja palvelimen vastauksen on oltava teksti / html, mutta sisältää JSON-tietoja. Asiakkaan puoli, Ext GWT -lomakkeen kuuntelija uploadForm.getForm (). addListener (uusi FormListenerAdapter () { @Ohittaa public void onActionFailed (Lomakelomake, int httpStatus, String responseText) { MessageBox.alert ("Virhe"); } @Ohittaa public void onActionComplete (Lomakelomake, int httpStatus, String responseText) { MessageBox.alert ("Menestys"); } }); Jos käytät sovelluksen / JSON-vastaustyyppiä, selain ehdottaa, että tallennan tiedoston. Palvelinpuolen lähdekoodikatkelma kevään MVC: n avulla palauta uusi AbstractUrlBasedView () { @SuppressWarnings ("tarkistamaton") @Ohittaa protected void renderMergedOutputModel (Karttamalli, HttpServletRequest-pyyntö, HttpServletResponse response) heittää poikkeuksen { response.setContentType ("teksti / html"); response.getWriter (). write (json); } }; | JSON: Vastaus on dynaamisesti tuotettua tietoa URL-osoitteessa välitettyjen kyselyparametrien mukaan. Esimerkki: {"Nimi": "Foo", "Id": 1234, "Sijoitus": 7} Sisältötyyppi: application / json JSON-P: JSON pehmusteella. Vastaus on JSON-dataa, jonka ympärille on kiedottu toimintokutsu. Esimerkki: functionCall ({"Nimi": "Foo", "Id": 1234, "Sijoitus": 7}); Content-Type: sovellus / javascript | Jos käytät Ubuntua tai Debiania ja palvelet .json-tiedostoja Apachen kautta, saatat haluta palvella tiedostoja oikealla sisältötyypillä. Teen tämän ensisijaisesti siksi, että haluan käyttää Firefox-laajennusta JSONView Apache-moduuli mod_mime auttaa tekemään tämän helposti. Ubuntun kanssa sinun on kuitenkin muokattava tiedostoa /etc/mime.types ja lisättävä rivi sovellus / Json Json Käynnistä sitten Apache uudelleen: sudo service apache2 käynnistetään uudelleen | Jos soitat ASP.NET-verkkopalveluihin asiakaspuolelta, sinun on käytettävä sovellusta / json toimiakseen. Uskon, että tämä on sama jQuery- ja Ext-kehyksille. | Oikea JSON-sisältötyyppi on application / json, JOS et käytä JSONP: ää, joka tunnetaan myös nimellä JSON with Padding, mikä on itse asiassa JavaScriptiä, joten oikea sisältötyyppi olisi application / javascript. | Ei ole epäilystäkään siitä, että application / json on paras MIME-tyyppi JSON-vastaukselle. Mutta minulla oli jonkin verran kokemusta siitä, että jouduin käyttämään application / x-javascriptia joidenkin pakkausongelmien vuoksi. Hosting-ympäristöni on jaettu isännöinti GoDaddyn kanssa. He eivät salli minun muuttaa palvelimen kokoonpanoja. Olin lisännyt seuraavan koodin web.config-tiedostooni vastausten pakkaamiseksi.Tätä käyttämällä .aspx-sivut pakattiin g-zipillä, mutta JSON-vastaukset eivät. lisäsin staattisten ja dynaamisten tyyppien osioissa. Mutta tämä ei pakkaa JSON-vastauksia lainkaan. Sen jälkeen poistin tämän äskettäin lisätyn tyypin ja lisäsin sekä staattisten että dynaamisten tyyppien osioissa, ja muutti vastaustyyppiä .ashx (asynkroninen käsittelijä) - application / x-javascript Ja nyt huomasin, että JSON-vastaukseni pakattiin g-zipillä. Joten suosittelen henkilökohtaisesti käyttöä application / x-javascript vain, jos haluat pakata JSON-vastauksesi jaettuun hosting-ympäristöön. Koska jaetussa hostingissa ne eivät salli sinun muuttaa IIS: ääkokoonpanot. | Vasta käytettäessä sovellusta / json MIME-tyypinä minulla on seuraavat (marraskuusta 2011 lähtien uusimmilla Chrome-versioilla, Firefox ja Firebug): Ei enää varoituksia Chromelta, kun JSON ladataan palvelimelta. Firebug lisää vastaukseen välilehden, joka näyttää JSON-tiedot alustettu. Jos MIME-tyyppi on erilainen, se näkyy vain nimellä 'Vastaussisältö'. | Kaikki ei toimi sisältötyyppisovelluksessa / JSON. Jos käytät tiedostojen lähettämiseen Ext JS -lomakkeen lähetystä, muista, että selain jäsentää palvelimen vastauksen